﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
using System.Windows.Media;
using LASDesktop.Classes;
using LASDesktop.LASDBClasses;

namespace LASDesktop.ModuloInventario
{
    #region Structs

    public struct GridStruct
    {
        public List<Articulo> ComboArticulos { get; set; }
        public Bodegas_has_Articulo ArticuloEnBodega { get; set; }
        public Articulo ArticuloNuevo { get; set; }
        public List<Bodega> ComboBodegas { get; set; }
        public Bodega BodegaFinal { get; set; }
        public List<GetAccountingCatalogResult> ComboCuentas { get; set; }
        public GetAccountingCatalogResult Cuenta { get; set; }
        public int Cantidad { get; set; }
        public Decimal Total
        {
            get
            {
                return ArticuloEnBodega == null ? 0 : Decimal.Truncate((ArticuloEnBodega.CostoUnitario * Cantidad * 100) / 100);
            }
        }
    }

    public struct TransferProduct
    {
        public int IdBodegaOrigen { get; set; }
        public int IdBodegaDestino { get; set; }
        public int IdEmpresa { get; set; }
        public int IdArticulo { get; set; }
        public int Cantidad { get; set; }
    }

    #endregion

    /// <summary>
    /// Interaction logic for Window1.xaml
    /// </summary>
    public partial class Inventario
    {
        private LASDBDataContext _db = new LASDBDataContext();
        private int _companyId = 1;
        private Login _parent;
        private readonly List<GetAccountingCatalogResult> _cuentas;
        private List<GridStruct> _gridDocumentSource = new List<GridStruct>();
        private List<Bodega> _bodegas;
        private readonly List<Articulo> _articulos;


        public Inventario(Login parent)
        {
            InitializeComponent();
            LoadProducts();
            LoadStorageRoomCodes();
            _parent = parent;
            _bodegas = GetStorageRoomsFromCompany(_companyId);
            _articulos = (List<Articulo>)GetProductsFromCompany(_companyId);
            _cuentas = (List<GetAccountingCatalogResult>)GetAccounts(_companyId);
            InputBodegasTranslado.ItemsSource = _bodegas;
            FechaEntradaDatePicker.SelectedDate = DateTime.Now;
            FechaSalidaDatePicker.SelectedDate = DateTime.Now;
            FechaTransladoDatePicker.SelectedDate = DateTime.Now;

            //TODO: Obtener compañia

            foreach (object t in TabCtrlPrincipal.Items)
            {
                Selector.AddSelectedHandler(t as DependencyObject, TabChangedEvent);
            }
        }

        #region Métodos de Actualización

        #region Métodos de Actualización del Maestro de Artículos
        public void LoadProducts()
        {
            _db = new LASDBDataContext();
            var productsList = GetProductsFromCompany(_companyId);

            if (productsList == null)
            {
                //TODO: Desplegar error
                return;
            }

            MaestroArticulosGrid.ItemsSource = productsList;
        }
        #endregion

        #region Métodos de Actualización de Bodegas
        /// <summary>
        /// Método que carga la lista de los códigos de las bodegas existentes al combobox
        /// y al label del nombre.
        /// </summary>
        private void LoadStorageRoomCodes()
        {
            try
            {
                var medidasResult = GetStorageRoomsFromCompany(_companyId);
                InputBodegas.ItemsSource = medidasResult;
                InputBodegas.DisplayMemberPath = "CodigoBodega";
                InputBodegas.SelectedIndex = 0;
            }
            catch
            {
                //TODO: Error

            }
        }

        /// <summary>
        /// Método que carga la lista de los productos en una determinada bodega al grid.
        /// </summary>
        private void LoadStorageRoomProduct()
        {
            try
            {
                //Actualiza el Datacontext en caso de cambios
                _db = new LASDBDataContext();

                //Obtiene los productos de la bodega actual
                var storageRoomId = (InputBodegas.SelectedItem as Bodega).IdBodega;
                var productsList = GetStorageRoomsProducts(storageRoomId);
                BodegasGrid.ItemsSource = productsList;
            }
            catch
            {

            }
        }
        #endregion

        #region Métodos de Actualización de Translados

        #endregion

        #region Métodos de Actualización Generales de los DataGrid
        /// <summary>
        /// Método que carga los productos de la lista _gridDocumentSource en el grid de documentos
        /// </summary>
        /// <param name="grid"></param>
        private void LoadNewProducts(DataGrid grid)
        {
            //Si no hay una fila vacia agrega una y verifica que el producto no se encuentra ya dentro del grid

            var ultimoArticulo = _gridDocumentSource.LastOrDefault();

            if (_gridDocumentSource.Count == 0 ||
                (TabCtrlPrincipal.SelectedIndex < 4 &&
                ultimoArticulo.ArticuloNuevo != null &&
                ultimoArticulo.BodegaFinal != null &&
                ultimoArticulo.Cuenta != null &&
                ultimoArticulo.Cantidad > 0) ||
                (TabCtrlPrincipal.SelectedIndex == 4 &&
                ultimoArticulo.ArticuloNuevo != null &&
                ultimoArticulo.BodegaFinal != null &&
                ultimoArticulo.Cantidad > 0))
            {
                for (int articulo = 0; articulo < _gridDocumentSource.Count - 1; articulo++)
                {
                    var posibleRepetido = _gridDocumentSource[articulo];

                    if ((TabCtrlPrincipal.SelectedIndex < 4 &&
                        posibleRepetido.ArticuloNuevo.IdArticulo == ultimoArticulo.ArticuloNuevo.IdArticulo &&
                        posibleRepetido.Cuenta.IdCuenta == ultimoArticulo.Cuenta.IdCuenta &&
                        posibleRepetido.BodegaFinal.IdBodega == ultimoArticulo.BodegaFinal.IdBodega) ||
                        (TabCtrlPrincipal.SelectedIndex == 4 && posibleRepetido.BodegaFinal.IdBodega == ultimoArticulo.BodegaFinal.IdBodega &&
                        posibleRepetido.ArticuloNuevo.IdArticulo == ultimoArticulo.ArticuloNuevo.IdArticulo))
                    {
                        var articuloRepetido = _gridDocumentSource[articulo];
                        articuloRepetido.Cantidad += _gridDocumentSource.LastOrDefault().Cantidad;
                        _gridDocumentSource[articulo] = articuloRepetido;
                        _gridDocumentSource.RemoveAt(_gridDocumentSource.Count - 1);
                        break;
                    }

                }

                var newRow = new GridStruct
                {
                    ComboBodegas = _bodegas,
                    ComboArticulos = _articulos,
                    ComboCuentas = _cuentas
                };
                _gridDocumentSource.Add(newRow);

            }

            if (TabCtrlPrincipal.SelectedIndex == 4 && ultimoArticulo.ArticuloNuevo != null && InputBodegasTranslado.SelectedIndex >= 0)
            {
                try
                {
                    var articuloPorBodega = GetStorageRoomProduct(((Bodega)InputBodegasTranslado.SelectedItem).IdBodega,
                                                                  ultimoArticulo.ArticuloNuevo.IdArticulo);
                    var articulo = _gridDocumentSource[_gridDocumentSource.Count - 1];
                    articulo.ArticuloEnBodega = articuloPorBodega;
                    _gridDocumentSource[_gridDocumentSource.Count - 1] = articulo;
                }
                catch
                {
                }
            }
            else if (_gridDocumentSource[_gridDocumentSource.Count - 1].ArticuloNuevo != null && _gridDocumentSource[_gridDocumentSource.Count - 1].BodegaFinal != null)
            {
                try
                {
                    var articuloPorBodega = GetStorageRoomProduct(ultimoArticulo.BodegaFinal.IdBodega,
                                                                  ultimoArticulo.ArticuloNuevo.IdArticulo);
                    var articulo = _gridDocumentSource[_gridDocumentSource.Count - 1];
                    articulo.ArticuloEnBodega = articuloPorBodega;
                    _gridDocumentSource[_gridDocumentSource.Count - 1] = articulo;
                }
                catch
                {
                }
            }


            //Actualiza el Grid
            grid.ItemsSource = null;
            grid.ItemsSource = _gridDocumentSource;

            var blockUntil = grid.Items.Count - 1;


            for (int i = 0; i < blockUntil; i++)
            {
                var row = GetRow(grid, i);
                var comboboxList = GetChildObject<ComboBox>(row, new List<Visual>());
                var textboxList = GetChildObject<TextBox>(row, new List<Visual>());
                comboboxList.ForEach(c => ((ComboBox)c).IsEnabled = false);
                textboxList.ForEach(t => ((TextBox)t).IsEnabled = false);
            }

            //Calcula el total
            Decimal total = 0;

            foreach (var art in _gridDocumentSource.Where(art => art.ArticuloEnBodega != null))
            {
                total = (art.Cantidad * art.ArticuloEnBodega.CostoUnitario * 100) / 100;
            }

            if (TabCtrlPrincipal.SelectedIndex == 2)
            {
                TotalEntrada.Text = total.ToString();
            }
            else if (TabCtrlPrincipal.SelectedIndex == 3)
            {
                TotalSalida.Text = total.ToString();
            }
        }

        private void SetNewValueInGrid<T>(DataGrid grid, ComboBox combo, String property, List<T> lista)
        {
            if (grid.SelectedIndex < 0) return;

            var indexCombo = combo.SelectedIndex;
            var indexGrid = grid.SelectedIndex;
            grid.SelectedIndex = -1;
            var articuloNuevo = _gridDocumentSource[indexGrid];
            articuloNuevo = (GridStruct)SetProperty(articuloNuevo, property, lista[indexCombo]);
            _gridDocumentSource[indexGrid] = articuloNuevo;
            LoadNewProducts(grid);
        }

        private void SetNewValueInGrid(DataGrid grid, TextBox textbox, String property, int type)
        {
            if (grid.SelectedIndex < 0) return;

            try
            {
                textbox.Foreground = new SolidColorBrush(Colors.Black);
                var indexGrid = grid.SelectedIndex;
                grid.SelectedIndex = -1;
                var articuloNuevo = _gridDocumentSource[indexGrid];
                switch (type)
                {
                    case 0:
                        {
                            var cantidad = int.Parse(textbox.Text);
                            articuloNuevo = (GridStruct)SetProperty(articuloNuevo, property, cantidad);
                        }
                        break;
                    case 1:
                        {
                            var cantidad = Decimal.Parse(textbox.Text);
                            articuloNuevo = (GridStruct)SetProperty(articuloNuevo, property, cantidad);
                        }
                        break;
                    case 2:
                        {
                            var cantidad = Decimal.Parse(textbox.Text);
                            if (cantidad > 100) throw (new Exception());
                            articuloNuevo = (GridStruct)SetProperty(articuloNuevo, property, cantidad);
                        }
                        break;
                }
                _gridDocumentSource[indexGrid] = articuloNuevo;
                LoadNewProducts(grid);
            }
            catch
            {
                textbox.Foreground = new SolidColorBrush(Colors.Red);
            }
        }
        #endregion
        #endregion

        #region Eventos del GUI

        #region Eventos de Maestro de Artículos
        private void ViewDetailsButtonClick(object sender, RoutedEventArgs e)
        {
            var producto = (Articulo)MaestroArticulosGrid.SelectedItem;

            var ventanaNuevoArticulo = new VisorDeArticulos(this, producto, _companyId);
            Overlay.Visibility = Visibility.Visible;
            ventanaNuevoArticulo.ShowDialog();
        }

        private void SubmitButtonClick(object sender, RoutedEventArgs e)
        {
            var ventanaNuevoArticulo = new VisorDeArticulos(this, _companyId);
            Overlay.Visibility = Visibility.Visible;
            ventanaNuevoArticulo.ShowDialog();
        }
        #endregion

        #region Eventos de Bodegas

        /// <summary>
        /// Método que se dispara al presionar el link de detalle de cuentas
        /// de un determinado articulo por bodega.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void EditAccountsButtonClick(object sender, RoutedEventArgs e)
        {

            var bodega = (Bodegas_has_Articulo)BodegasGrid.SelectedItem;
            var ventanaNuevoArticulo = new VisorDeCuentasDeArticulos(this, bodega.IdBodega, bodega.IdArticulo, _companyId);
            Overlay.Visibility = Visibility.Visible;
            ventanaNuevoArticulo.ShowDialog();
        }

        /// <summary>
        /// Método que se dispara al cambiar de bodega en el combobox de bodegas
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StorageRoomComboChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            var storageRoomName = ((Bodega)InputBodegas.SelectedItem).NombreBodega;
            TextNombreBodega.Content = storageRoomName;
            LoadStorageRoomProduct();
        }

        #endregion

        #region Eventos de Entrada de mercancias
        private void ComboBoxArticulosEntradaSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridEntrada, (ComboBox)sender, "ArticuloNuevo", _articulos);
        }

        private void ComboBoxBodegasEntradaSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridEntrada, (ComboBox)sender, "BodegaFinal", _bodegas);
        }

        private void ComboBoxCuentasEntradaSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridEntrada, (ComboBox)sender, "Cuenta", _cuentas);
        }

        private void TextboxEntradaCantidadChanged(object sender, RoutedEventArgs e)
        {
            SetNewValueInGrid(GridEntrada, (TextBox)sender, "Cantidad", 0);
        }

        private void DeleteButtonEntradaClicked(object sender, MouseButtonEventArgs e)
        {
            if (GridEntrada.SelectedIndex < 0) return;
            var indexGrid = GridEntrada.SelectedIndex;
            _gridDocumentSource.RemoveAt(indexGrid);
            LoadNewProducts(GridEntrada);
        }
        #endregion

        #region Eventos de Salida de mercancias
        private void ComboBoxArticulosSalidaSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridSalida, (ComboBox)sender, "ArticuloNuevo", _articulos);
        }

        private void ComboBoxBodegasSalidaSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridSalida, (ComboBox)sender, "BodegaFinal", _bodegas);
        }

        private void TextboxCantidadSalidaChanged(object sender, RoutedEventArgs e)
        {
            SetNewValueInGrid(GridSalida, (TextBox)sender, "Cantidad", 0);
        }

        private void ComboBoxCuentasSalidaSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridSalida, (ComboBox)sender, "Cuenta", _cuentas);
        }

        private void DeleteButtonSalidaClicked(object sender, MouseButtonEventArgs e)
        {
            if (GridSalida.SelectedIndex < 0) return;
            var indexGrid = GridSalida.SelectedIndex;
            _gridDocumentSource.RemoveAt(indexGrid);
            LoadNewProducts(GridSalida);
        }
        #endregion

        #region Eventos de Translados
        private void ComboBoxArticulosTransladoSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridTranslado, (ComboBox)sender, "ArticuloNuevo", _articulos);
        }

        private void ComboBoxBodegasTransladoSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            SetNewValueInGrid(GridTranslado, (ComboBox)sender, "BodegaFinal", _bodegas);
        }

        private void DeleteButtonTransladoClicked(object sender, MouseButtonEventArgs e)
        {
            if (GridTranslado.SelectedIndex < 0) return;
            var indexGrid = GridTranslado.SelectedIndex;
            _gridDocumentSource.RemoveAt(indexGrid);
            LoadNewProducts(GridTranslado);
        }

        private void TextboxTransladoCantidadChanged(object sender, RoutedEventArgs e)
        {
            SetNewValueInGrid(GridTranslado, (TextBox)sender, "Cantidad", 0);
        }
        #endregion

        private void TabChangedEvent(object sender, RoutedEventArgs routedEventArgs)
        {
            TabCtrlPrincipal.SelectedIndex = TabCtrlPrincipal.SelectedIndex;

            _gridDocumentSource = new List<GridStruct>();
            LoadNewProducts(GridSalida);
            LoadNewProducts(GridTranslado);
            LoadNewProducts(GridEntrada);
        }

        #endregion

        #region Métodos LINQ-TO-SQL
        /// <summary>
        /// Método que obtiene los productos de una determinada compañía
        /// </summary>
        /// <param name="companyId"></param>
        /// <returns></returns>
        private IEnumerable<Articulo> GetProductsFromCompany(int companyId)
        {
            List<Articulo> listaDeArticulos = null;

            try
            {
                var resultado = from articulo in _db.Articulos
                                join articulosEnBodegas in _db.Bodegas_has_Articulos on articulo.IdArticulo equals
                                    articulosEnBodegas.IdArticulo
                                join bodega in _db.Bodegas on articulosEnBodegas.IdBodega equals bodega.IdBodega
                                join empresaActual in _db.Empresas on bodega.IdBodega equals empresaActual.IdEmpresa
                                where empresaActual.IdEmpresa == companyId
                                select articulo;
                listaDeArticulos = resultado.ToList();
            }
            catch
            {
                //TODO: Error al recuperar los articulos
            }

            return listaDeArticulos;
        }

        /// <summary>
        /// Método que llama al query para obtener la lista de bodegas por compañía
        /// </summary>
        /// <param name="companyId"></param>
        /// <returns>La lista de bodegas por compañía</returns>
        private List<Bodega> GetStorageRoomsFromCompany(int companyId)
        {
            List<Bodega> listaBodegas = null;

            try
            {
                var resultado = from bodega in _db.Bodegas
                                where bodega.IdEmpresa == companyId
                                select bodega;
                listaBodegas = resultado.ToList();
            }
            catch
            {
                //TODO: Error al recuperar los articulos
            }

            return listaBodegas;
        }

        /// <summary>
        /// Método que llama al query para obtener la lista de artículos por bodega
        /// </summary>
        /// <param name="storageRoomId">La lista de artículos por bodega</param>
        /// <returns></returns>
        private IEnumerable<Bodegas_has_Articulo> GetStorageRoomsProducts(int storageRoomId)
        {
            List<Bodegas_has_Articulo> listaArticulos = null;

            try
            {
                var resultado = from articuloEnBodega in _db.Bodegas_has_Articulos
                                where articuloEnBodega.IdBodega == storageRoomId
                                select articuloEnBodega;
                listaArticulos = resultado.ToList();
            }
            catch
            {
                //TODO: Error al recuperar los articulos
            }

            return listaArticulos;
        }

        /// <summary>
        /// Método que regresa un atículo por bodega a partir del id de la bodega y el id del producto
        /// </summary>
        /// <param name="storageRoomId"></param>
        /// <param name="productId"></param>
        /// <returns></returns>
        private Bodegas_has_Articulo GetStorageRoomProduct(int storageRoomId, int productId)
        {
            Bodegas_has_Articulo articuloEnBodegaFinal = null;

            try
            {
                var resultado = (from articuloEnBodega in _db.Bodegas_has_Articulos
                                 where articuloEnBodega.IdBodega == storageRoomId & articuloEnBodega.IdArticulo == productId
                                 select articuloEnBodega).Single();
                articuloEnBodegaFinal = resultado;
            }
            catch
            {
                //TODO: Error al recuperar los articulos
            }

            return articuloEnBodegaFinal;
        }

        /// <summary>
        /// Método que permite obtener las cuentas de una empresa
        /// </summary>
        /// <param name="idEmpresa"></param>
        /// <returns></returns>
        private IEnumerable<GetAccountingCatalogResult> GetAccounts(int idEmpresa)
        {
            IEnumerable<GetAccountingCatalogResult> catalogoContable = null;

            try
            {
                var result = _db.GetAccountingCatalog(idEmpresa).Where(cuenta => cuenta.TipoCuenta.Equals("Cuenta Activa") && Convert.ToInt32(cuenta.Nivel) > 2);
                catalogoContable = result.ToList();
            }
            catch
            {

            }

            return catalogoContable;
        }


        /// <summary>
        /// Método que permite transladar productos de una bodega a otra
        /// </summary>
        private void TransferStockBetweenStores(IEnumerable<TransferProduct> listaProductos )
        {
            try
            {
                foreach (var transferProduct in listaProductos)
                {
                    _db.TransferProducts(transferProduct.IdBodegaOrigen, transferProduct.IdBodegaDestino,
                                         transferProduct.IdArticulo, transferProduct.Cantidad, _companyId);
                    
                }
                MessageBox.Show("Traspaso realizado con exito");
                _gridDocumentSource.Clear();
            }
            catch (Exception)
            {
                MessageBox.Show("No se pudo realizar las tranferencias entre bodegas");
            }

        }


        /// <summary>
        /// Permite obtener la lista de productos para insertarla en la base
        /// </summary>
        /// <returns></returns>
        private IEnumerable<TransferProduct> TransformGridToTransladableProduct()
        {
            _gridDocumentSource.Remove(_gridDocumentSource.Last());
            var bodegaOrigen = _bodegas[InputBodegasTranslado.SelectedIndex].IdBodega;
            return _gridDocumentSource.Select(gridStruct => new TransferProduct()
                                                                {
                                                                    IdArticulo = gridStruct.ArticuloEnBodega.IdArticulo,
                                                                    IdBodegaDestino = gridStruct.BodegaFinal.IdBodega,
                                                                    IdBodegaOrigen = bodegaOrigen,
                                                                    IdEmpresa = _companyId,
                                                                    Cantidad = gridStruct.Cantidad
                                                                }).ToList();
        }

        private void AceptarTranslado_Click(object sender, RoutedEventArgs e)
        {
            var listaProductos = TransformGridToTransladableProduct();
            if(InputBodegasTranslado.SelectedIndex > 0 || FechaTransladoDatePicker.SelectedDate == null)
            {
                MessageBox.Show("Por favor rellene todos los campos");
                return;
            }

            if (listaProductos.ToList().Count == 0)
            {
                MessageBox.Show("Por favor añada productos");
                return;
            }
            TransferStockBetweenStores(listaProductos);
        }


        #endregion

        #region Métodos Estáticos
        public static List<Visual> GetChildObject<T>(Visual obj, List<Visual> result) where T : FrameworkElement
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                Visual c = VisualTreeHelper.GetChild(obj, i) as FrameworkElement;
                if (c != null)
                {
                    if (c.GetType().Equals(typeof(T)))
                    {
                        result.Add(c);
                    }
                    GetChildObject<T>(c, result);
                }
            }

            return result;
        }

        public static DataGridRow GetRow(DataGrid grid, int index)
        {
            var row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
            if (row == null)
            {
                // May be virtualized, bring into view and try again.
                grid.UpdateLayout();
                grid.ScrollIntoView(grid.Items[index]);
                row = (DataGridRow)grid.ItemContainerGenerator.ContainerFromIndex(index);
            }
            return row;
        }


        private static object SetProperty(object containingObject, string propertyName, object newValue)
        {
            containingObject.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, containingObject, new[] { newValue });

            return containingObject;
        }



        #endregion

        #region Eventos de la ventana
        /// <summary>
        /// Método que se dispara al seleccionar una opción del menú general
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ChangeWindow(object sender, System.Windows.Input.MouseButtonEventArgs e)
        {
            if (sender.GetType() != (typeof(Label))) return;

            switch (((Label)sender).Content.ToString())
            {
                case "Inventario":
                    _parent.MostrarInventarios();
                    break;
                case "Ventas":
                    _parent.MostrarVentas();
                    break;
                case "Socios":
                    _parent.MostrarSocios();
                    break;
                case "Bancos":
                    _parent.MostrarBancos();
                    break;
                case "Compras":
                    _parent.MostrarCompras();
                    break;
            }
        }

        /// <summary>
        /// Método que se dispara al cerrar la ventana.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CloseParent(object sender, System.ComponentModel.CancelEventArgs e)
        {
            _parent.Close();
        }

        
        #endregion




        private void AceptarEntradaClick(object sender, System.Windows.RoutedEventArgs e)
        {
            
        }

        private void AceptarSalidaClick(object sender, System.Windows.RoutedEventArgs e)
        {
            
        }

        private void AceptarTransferencia(object sender, System.Windows.RoutedEventArgs e)
        {
            
        }
    }
}
